home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / DEF / Process / Harmonize / len-harmonize3 < prev   
Lisp/Scheme  |  1998-10-23  |  2KB  |  42 lines

  1. len-harmonize3 mel1 len1 mel2 len2 mel3 len3 
  2.                                     fold zone tonality swaps dissonances parallels
  3.  
  4. This is length-sensitive extension to the filter-harmonize3. It enables to give also length patterns associated to three input melodies. len-harmonize3 has three outputs which must be bound to atoms using multiple-value-setq.
  5.  
  6. (multiple-value-setq (hmel1 hmel2 hmel3)
  7.     (len-harmonize3 mel1 len1 mel2 len2 mel3 len3
  8.                12
  9.                '1/1
  10.                (activate-tonality (harmonic-minor c 2))
  11.                '((4 4))
  12.                '((1 2 6 8 10 11))
  13.                '(0 5 7)))
  14.  
  15. Note that the zone controls how long the length patterns are to be run, and controls the recycling of the input patterns when necessary. Try with different zone lengths to get the effect. See len-harmonize2.
  16.  
  17. After harmonisation it is often needed to smooth out the output a bit with find-change and filter-deactivate. Also symbol-fold can be handy in keeping the material more consistent. These are needed mostly when you don't exactly know beforehand what the input melodies are, if they have lots of repeats, or are in wide range of symbols.
  18.  
  19. (setq melody-1-mat 
  20.   (symbol-fold 14 7 (filter-deactivate 4 60 (find-change hmel1))))
  21. (setq melody-2-mat 
  22.   (symbol-fold 14 7 (filter-deactivate 4 60 (find-change hmel2))))
  23. (setq melody-3-mat 
  24.   (symbol-fold 14 7 (filter-deactivate 4 60 (find-change hmel3))))
  25.  
  26. Other possibly useful functions
  27.  
  28. len-harmonize3 performs its operation with the aid of expand-with-len and compress-with-len. These functions can be useful in other purposes, too.
  29.  
  30. expand-with-len takes a symbol pattern, length pattern, zone  length and the minimum length (minimum quantisation value). The result is a symbol pattern which is expanded using the rhythm to last the zone using the minimum length to determine the number of repeats of each symbol.
  31.  
  32. (expand-with-len '(a b c d) '(1/16. 1/8) '1/1 '1/32)
  33. --> (a a a b b b b c c c d d d d a a a b b b b c c c d d d d a a a b b b b)
  34.  
  35. compress-with-len takes a symbol pattern, length pattern and minimum
  36. length and picks up the right symbols that match the rhythm.
  37.  
  38. (compress-with-len (expand-with-len '(a b c d) '(1/16. 1/8) '1/1 '1/32)
  39.                    '(1/16. 1/8)
  40.                    '1/32)
  41. --> (a b c d a b c d a b)
  42.